In a distributed system including multiple storage nodes, a host sends multiple generated data write requests to multiple storage nodes. Each storage node stores some data write requests. A data write request includes data and a logical address of a storage node into which the data is to be written (hereinafter referred to as a logical address). To prevent a loss of a data write request stored in a storage node caused because a fault occurs on the storage node, the host calculates check data of the multiple generated data write requests, and sends the check data to one or more storage nodes for storage. To calculate the check data, the host groups, according to a predetermined size, multiple data write requests that reach a specified size, to obtain multiple data units, and then calculates check units of the multiple data units. These data units and check units form a stripe. Finally, the host sends each data unit or each check unit to a storage node for storage. These data write requests are randomly grouped into multiple data units, and sent to different storage nodes for storage. Therefore, during data reading, data carried in the multiple data write requests usually needs to be collected from different storage nodes. A cross-storage node read operation affects data reading efficiency.